package com.hardy.newSolutionAlgorithm;

import java.util.ArrayList;
import java.util.Scanner;

/**
 * Author: fuxh3@lenovo.com
 * Date: Created in 2017/11/20 0020
 * 题目描述
 牛牛拿到了一个藏宝图，顺着藏宝图的指示，牛牛发现了一个藏宝盒，藏宝盒上有一个机关，
 机关每次会显示两个字符串 s 和 t，根据古老的传说，牛牛需要每次都回答 t 是否是 s 的子序列。注意，
 子序列不要求在原字符串中是连续的，例如串 abc，它的子序列就有 {空串, a, b, c, ab, ac, bc, abc} 8 种。
 输入描述:
 每个输入包含一个测试用例。每个测试用例包含两行长度不超过 10 的不包含空格的可见 ASCII 字符串。
 输出描述:
 输出一行 “Yes” 或者 “No” 表示结果。
 示例1
 输入

 x.nowcoder.com
 ooo
 输出

 Yes
 *
 *
 *
 *
 *
 */
public class TreasureMap {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
            char[] chs = scanner.nextLine().toCharArray();
            char[] chs1 = scanner.nextLine().toCharArray();
            System.out.println(getResult(chs,chs1));
        }
    }

    private static String getResult(char[] chs, char[] chs1) {
        ArrayList<ArrayList<Character>> subSetList = subSets(chs);
        Character[] characters = new Character[chs1.length];
        for (int i =0;i<chs1.length;i++){
            characters[i]=chs1[i];
        }
        for (ArrayList<Character> res:subSetList){
            int index = 0;
            for(int i=0;i<characters.length;i++){
                if (res.size()==characters.length){
                    if(res.get(i).equals(characters[i])){
                        index++;
                    }
                }
            }
            if(index==characters.length){
                return "Yes";
            }
        }
        return "No";
    }

    private static ArrayList<ArrayList<Character>> subSets(char[] chs) {
        ArrayList<ArrayList<Character>> res = new ArrayList<>();
        ArrayList<Character> temp = new ArrayList<>();
        dfs(0,chs,res,temp);
        return res;
    }

    private static void dfs(int n, char[] chs, ArrayList<ArrayList<Character>> res,
                                    ArrayList<Character> temp) {
        if(n>=chs.length){
            res.add(new ArrayList<>(temp));
        }else{
            dfs(n+1,chs,res,temp);
            temp.add(chs[n]);
            dfs(n+1,chs,res,temp);
            temp.remove(temp.size()-1);
        }
    }
}
